const express = require('express');
const md5 = require('md5');
const UserModel = require('../db/models/UserModel');
const { RES_CODE } = require('../utils/constants');
const { createToken } = require('../utils/tokenUtils');
const verifyToken = require('../middlewares/verifyToken.js')

const router = express.Router();

// 注册登陆路由
/* 
整体3步
1. 读取参数数据
2. 处理数据(操作数据库)
3. 返回响应
router.post(path, middleware1, middleware2)
*/
router.post('/login', async (req, res, next) => {
  // console.log('next', next)

  // 读取参数
  const { username, pwd } = req.body;
  console.log('----', username, pwd)
  try {
    // 根据username和pwd查询对应的user
    const user = await UserModel.findOne({ username, pwd: md5(pwd) });

    // 如果没有, 返回提示登陆失败的信息
    if (!user) {
      return res.json({
        code: RES_CODE.DATA_ERROR,
        message: '用户名或密码错误',
      });
    }

    // 如果有, 根据user的id生成token, 返回包含token和user的数据
    const token = createToken(user._id);
    res.json({
      code: RES_CODE.SUCCESS,
      data: {
        token,
        user,
      },
      message: '登陆成功',
    });
  } catch (error) {
    console.log(error)
    res.send({
      code: RES_CODE.SERVER_ERROR,
      message: '服务器出错!'
    })
  }
});

/* 
获取登陆用户信息
*/
router.get('/info', verifyToken, async (req, res) => {
  // 得到userId
  const userId = req.userId
  // 查询数据库得到对应的user
  const user = await UserModel.findById(userId)
  res.json({
    code: RES_CODE.SUCCESS,
    data: user,
    message: '获取登陆用户成功'
  })
})

/* 
退出登陆的接口
*/
router.get('/logout', verifyToken, (req, res) => {
  // 清除保存在后台的当前用户的一些数据  当前没有

  // 返回成功响应
  res.json({
    code: RES_CODE.SUCCESS,
    message: '退出成功!'
  })
})


module.exports = router;

/* 
测试:
http://localhost:8081/admin/login  post
http://localhost:8081/admin/user/2/3  get
*/
